home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / ASM-M68K / SEGMENT.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  1KB  |  58 lines

  1. #ifndef _M68K_SEGMENT_H
  2. #define _M68K_SEGMENT_H
  3.  
  4. /* define constants */
  5. /* Address spaces (FC0-FC2) */
  6. #define USER_DATA     (1)
  7. #ifndef __USER_DS
  8. #define __USER_DS     (USER_DATA)
  9. #endif
  10. #define USER_PROGRAM  (2)
  11. #define SUPER_DATA    (5)
  12. #ifndef __KERNEL_DS
  13. #define __KERNEL_DS   (SUPER_DATA)
  14. #endif
  15. #define SUPER_PROGRAM (6)
  16. #define CPU_SPACE     (7)
  17.  
  18. #ifndef __ASSEMBLY__
  19.  
  20. typedef struct {
  21.     unsigned long seg;
  22. } mm_segment_t;
  23.  
  24. #define MAKE_MM_SEG(s)    ((mm_segment_t) { (s) })
  25. #define USER_DS        MAKE_MM_SEG(__USER_DS)
  26. #define KERNEL_DS    MAKE_MM_SEG(__KERNEL_DS)
  27.  
  28. /*
  29.  * Get/set the SFC/DFC registers for MOVES instructions
  30.  */
  31.  
  32. static inline mm_segment_t get_fs(void)
  33. {
  34.     mm_segment_t _v;
  35.     __asm__ ("movec %/dfc,%0":"=r" (_v.seg):);
  36.  
  37.     return _v;
  38. }
  39.  
  40. static inline mm_segment_t get_ds(void)
  41. {
  42.     /* return the supervisor data space code */
  43.     return KERNEL_DS;
  44. }
  45.  
  46. static inline void set_fs(mm_segment_t val)
  47. {
  48.     __asm__ __volatile__ ("movec %0,%/sfc\n\t"
  49.                   "movec %0,%/dfc\n\t"
  50.                   : /* no outputs */ : "r" (val.seg) : "memory");
  51. }
  52.  
  53. #define segment_eq(a,b)    ((a).seg == (b).seg)
  54.  
  55. #endif /* __ASSEMBLY__ */
  56.  
  57. #endif /* _M68K_SEGMENT_H */
  58.